home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / css / source / minpn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-19  |  5.7 KB  |  180 lines

  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <glib.h>
  6. #include <strlib.h>
  7. #include "col.h"
  8.  
  9. /* #include "..\lib.h" */
  10.  
  11. void box(int x, int y)
  12. {
  13.      line(x, y, x+20, y, PSET, col15, 0, 0xffff);
  14.      line(x, y, x, y+20, PSET, col15, 0, 0xffff);
  15.      line(x, y+20, x+20, y+20, PSET, col8, 0, 0xffff);
  16.      line(x+20, y+20, x+20, y, PSET, col8, 0, 0xffff);
  17.      return;
  18. }
  19.  
  20. /*  input area 0,0,114,139  */
  21. void  minpnb(int x0, int y0)
  22. {
  23. int bcl[16];
  24. int xx,yy;
  25.    bcl[0] = col1;
  26.  
  27.    /* 影枠   影塗色 */
  28.    line(x0+10, y0+10, x0+114, y0+139, XOR, col8, 2, 0xffff);
  29.  
  30.    /* キーボード */
  31.    line(x0+0,y0+0,x0+105,y0+130,   PSET, col7, 2, 0xffff);
  32.    line(x0+0,y0+0,x0+105,y0+130,   PSET, col1, 1, 0xffff);
  33.    line(x0+105,y0+0,x0+108,y0+3,   PSET, col1, 0, 0xffff);
  34.    line(x0+108,y0+3,x0+108,y0+133, PSET, col1, 0, 0xffff);
  35.  /*  line(x0+108,y0+133,x0+105,y0+130, PSET, col1, 0, 0xffff); */
  36.    line(x0+108,y0+133,x0+3,y0+133, PSET, col1, 0, 0xffff);
  37.    line(x0+3,y0+133,x0+0,y0+130,   PSET, col1, 0, 0xffff);
  38.  
  39.    /*  キーボード外枠塗色 */
  40.    drmode(PSET);
  41.    paint(x0+106,y0+10, 1, col1,  1, bcl);
  42.    paint(x0+10,y0+131, 1, col1,  1, bcl);
  43.    
  44.    /* データ表示窓 */
  45.    line(x0+5,y0+5,x0+100,y0+25, PSET, col1, 2, 0xffff);
  46.    line(x0+5,y0+5,x0+100,y0+25, PSET, col8, 1, 0xffff);
  47.    /* キー作成 */
  48.    xx=x0+5; yy=y0+30;
  49.    box(xx, yy);
  50.    symbol_(xx+2, yy+2, "7", 1,1, col15,0,PSET);
  51.    xx=x0+30; yy=y0+30;
  52.    box(xx, yy);
  53.    symbol_(xx+2, yy+2, "8", 1,1, col15,0,PSET);
  54.    xx=x0+55; yy=y0+30;
  55.    box(xx, yy);
  56.    symbol_(xx+2, yy+2, "9", 1,1, col15,0,PSET);
  57.    xx=x0+5;  yy=y0+55;
  58.    box(xx, yy);
  59.    symbol_(xx+2, yy+2, "4", 1,1, col15,0,PSET);
  60.    xx=x0+30; yy=y0+55;
  61.    box(xx, yy);
  62.    symbol_(xx+2, yy+2, "5", 1,1, col15,0,PSET);
  63.    xx=x0+55; yy=y0+55;
  64.    box(xx, yy);
  65.    symbol_(xx+2, yy+2, "6", 1,1, col15,0,PSET);
  66.    xx=x0+5;  yy=y0+80;
  67.    box(xx, yy);
  68.    symbol_(xx+2, yy+2, "1", 1,1, col15,0,PSET);
  69.    xx=x0+30; yy=y0+80;
  70.    box(xx, yy);
  71.    symbol_(xx+2, yy+2, "2", 1,1, col15,0,PSET);
  72.    xx=x0+55; yy=y0+80;
  73.    box(xx, yy);
  74.    symbol_(xx+2, yy+2, "3", 1,1, col15,0,PSET);
  75.    xx=x0+5;  yy=y0+105;
  76.    box(xx, yy);
  77.    symbol_(xx+2, yy+2, "0", 1,1, col15,0,PSET);
  78.    xx=x0+30; yy=y0+105;
  79.    box(xx, yy);
  80.    symbol_(xx+2+6, yy+2, ".", 1,1, col15,0,PSET);
  81.    xx=x0+80, yy=y0+30;
  82.    box(xx, yy);
  83.    symbol_(xx+2, yy+2, "←", 1,1, col15,0,PSET);
  84.    xx=x0+80, yy=y0+55;
  85.    box(xx, yy);
  86.    symbol_(xx+2, yy+2, "-", 1,1, col15,0,PSET);
  87.    xx=x0+55, yy=y0+105;
  88.    line(xx, yy, xx+45, yy, PSET, col15, 0, 0xffff);
  89.    line(xx, yy, xx, yy+20, PSET, col15, 0, 0xffff);
  90.    line(xx, yy+20, xx+45, yy+20, PSET, col8, 0, 0xffff);
  91.    line(xx+45, yy+20, xx+45, yy, PSET, col8, 0, 0xffff);
  92.    symbol_(xx+4,  yy+2, "実", 1,1, col15,0,PSET);
  93.    symbol_(xx+25, yy+2, "行", 1,1, col15,0,PSET);
  94.    return;
  95. }
  96.  
  97. /* xy  check     return( yes=1, no=0 ) */
  98. int xychk(int x, int y, int x1, int y1, int x2, int y2)
  99. {
  100.     if (x1<=x && x<=x2 && y1<=y && y<=y2) return(1);
  101.     return(0);
  102. }
  103.  
  104. /* input num set and print */
  105. void numset(int x, int y, int nn, char nline[], int *ncnt, int *pf)
  106. {
  107.    if ((nn == '-' && *ncnt != 0) || (nn != 8 && *ncnt == 11) || ( nn == '.' && *pf != 0)) {
  108.       putchar('\7'); return; /* error */
  109.    }
  110.    if ( nn == 8 ) {
  111.       if (*ncnt == 0) putchar('\7'); /* error */
  112.       else {
  113.          (*ncnt)--;
  114.          symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col1, 0, PSET);
  115.          if (nline[*ncnt] == '.') *pf = 0; /* flag clear */
  116.          nline[*ncnt] = '\0';
  117.       }
  118.       return;
  119.    }
  120.    if (nn == '.') *pf = 1; /* flag set */
  121.    nline[*ncnt] = nn;
  122.    symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col14, 0, PSET);
  123.    (*ncnt)++;
  124.    return;
  125. }
  126.  
  127. /* mouse input */
  128. double minpn(int x, int y, double pnum)
  129. {
  130.     int ncnt = 0, pf = 0, cnt, mx, my, nn;
  131.     char nline[12], i;
  132.     void GDS_getBlock();
  133.     int  GDS_putBlock();
  134.     unsigned  ddadr[2];
  135.     unsigned char page;
  136.     char      buf[8052];
  137.     
  138.     MOS_disp(1); /* mouse disp off */
  139.         
  140.     BSETDATAADR(ddadr, buf);
  141.     page = 0;
  142.     GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+114, y+139);
  143.     
  144.     for (i=0; i <12; i++) nline[i]=0;
  145.     minpnb(x,y);
  146.     MOS_horizon(x, x+105);
  147.     MOS_vertical(y, y+130);
  148.     MOS_disp(0); /* mouse disp on */
  149.     
  150.     while (0==0) {
  151.        nn = 0;
  152.        while (MOS_rdon(0, &cnt, &mx, &my) == 0);
  153.        if (xychk(mx, my, x+5,  y+30, x+25, y+50) == 1)  nn = '7';
  154.        if (xychk(mx, my, x+30, y+30, x+50, y+50) == 1)  nn = '8';
  155.        if (xychk(mx, my, x+55, y+30, x+75, y+50) == 1)  nn = '9';
  156.        if (xychk(mx, my, x+5,  y+55, x+25, y+75) == 1)  nn = '4';
  157.        if (xychk(mx, my, x+30, y+55, x+50, y+75) == 1)  nn = '5';
  158.        if (xychk(mx, my, x+55, y+55, x+75, y+75) == 1)  nn = '6';
  159.        if (xychk(mx, my, x+5,  y+80, x+25,y+100) == 1)  nn = '1';
  160.        if (xychk(mx, my, x+30, y+80, x+50,y+100) == 1)  nn = '2';
  161.        if (xychk(mx, my, x+55, y+80, x+75,y+100) == 1)  nn = '3';
  162.        if (xychk(mx, my, x+5,  y+105,x+25,y+125) == 1)  nn = '0';
  163.        if (xychk(mx, my, x+30, y+105,x+50,y+125) == 1)  nn = '.';
  164.        if (xychk(mx, my, x+80, y+30, x+100,y+50) == 1)  nn =  8; /* back spase */ 
  165.        if (xychk(mx, my, x+80, y+55, x+100,y+75)  == 1)  nn = '-';
  166.        if (xychk(mx, my, x+55, y+105,x+100,y+125) == 1) {
  167.           MOS_horizon(0,  639);
  168.           MOS_vertical(0, 399);
  169.           GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+114, y+139, PSET);
  170.           if (nline[0] == '\0') return(pnum);
  171.           return(atof(nline));
  172.        }
  173.        if (nn != 0) numset(x, y, nn, nline, &ncnt, &pf);
  174.        else putchar('\7');
  175.        while (MOS_rdopen(0, &cnt, &mx, &my) == 1);
  176.     }
  177. }
  178.  
  179. /* end of file */
  180.